{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f8ba3161",
   "metadata": {},
   "source": [
    "# Interp 6: Test symmetries for trained models"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6535c1f2",
   "metadata": {},
   "source": [
    "In the previous notebook, to make target functions clear, we were inputing the symbolic formula. In practice, we want to apply symmetry testing and tree graph plotting to a trained model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "1416f4c8",
   "metadata": {},
   "outputs": [],
   "source": [
    "from kan.hypothesis import *\n",
    "from kan import *"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a438584",
   "metadata": {},
   "source": [
    "Example 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "0b63eed4",
   "metadata": {},
   "outputs": [],
   "source": [
    "f = lambda x: x[:,[0]] + torch.sin(torch.pi*x[:,[1]]) + x[:,[2]] ** 2\n",
    "dataset = create_dataset(f, n_var=3)\n",
    "model = KAN(width=[3,5,5,1], grid=5, k=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f4a151b6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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R/9poz/ObOzYsaMGBga6PBHp7CS9Zqrs5IGXO2bNmlV9fb393PuouEzQ19dXs2fP7vYYE2pgYOCoXXKmJjtJrznad7LXLw0cqLdTBQCYdGIAAMKJAQAIJwYAIJwYAIBwYgAAwokBAAgnBgAgnBgAgHBiAADCiQEACCcGACCcGACAcGIAAMKJAQAIJwYAIJwYAIBwYgAAwokBAAgnBgAgnBgAgHBiAADCiQEACCcGACCcGACAcGIAAMKJAQAIJwYAIJwYAIBwYgAAwokBAAgnBgAgnBgAgHBiAADCiQEACCcGACCcGACAcGIAAMKJAQAIJwYAIJwYAIBwYgAAwokBAAgnBgAgnBgAgHBiAADCiQEACCcGACCcGACAcGIAAMKJAQAIJwYAIJwYAIBwYgAAwnVaa63bQ6RordXw8HBVVfX391en0+nyRKSzk/QaO9kdYgAAwrlMAADhxAAAhBMDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAxNgaGio5syZU51Op04//fTat2/fX95u9+7dNX/+/Op0OnXsscfWu+++e2QHJYadpNfYyd4mBibAwMBArVq1qqqqtm3bVs8///xBt2mt1Y033libN2+uTqdTL7zwQl1yySVHdlBi2El6jZ3scY0JsXv37nbqqae2qmpz585te/bs+dP377777lZVraraY4891qUpSWIn6TV2sneJgQm0du3asUV+6qmnxo4//vjjY8fvuuuuLk5IGjtJr7GTvUkMTKCRkZF25plntqpqp5xyStuzZ097/fXXW19fX6uqtmTJkrZ///5uj0kQO0mvsZO9SQxMsFdeeWWsbpcvX96OO+64VlXt4osvbrt37+72eASyk/QaO9l7Oq21NrmvSsjSWqvzzz+/tmzZMnbs3HPPrU2bNtUJJ5zwtz/38ssv13vvvVcffvhhbd26tfbu3Vvr1q2rW265ZdJnZmobz05+//339dprr9WGDRvqiy++qB9//LFmzpxZ8+bNq3vvvbcuuOCCIzM8U9J4dvLXX3+tBx54oD744IPatm1b/fLLLzVr1qw666yz6o477qhrrrmmOp3OkfkPTEHeTTDBOp1OrVixYuzfs2fPrjfffPMfQ6Cq6r777qtnnnmmtm/fXieffPIkT0mS8ezkE088UXfffXd98803ddlll9U999xT8+fPrzfeeKMuvPDCevXVV4/A5ExV49nJnTt31nPPPVcDAwO1aNGiuueee2rhwoX12Wef1eLFi2vlypVHYPIprKvnJaagr776qs2aNWvsFNjAwEDbsWPHv/7c22+/3b799tvWWmtr1qxpVdXWrVs3ydOSYDw7+frrr7eNGzcedHzjxo1txowZbebMmU7nMm7j2cmRkZG2b9++g47//vvv7ZxzzmlV1T799NPJGnnKc2ZgAv300091xRVX1M6dO+vEE0+sqv/7oI2HH374X392wYIFNXfu3MkekTDj3clrrrmmLrroooOOX3TRRXXppZfWzz//XFu3bp2UmZnaxruT06ZNq+nTpx90/Pjjj6/LL7+8qqq+/vrriR84hBiYIENDQ3XVVVfVN998U4ODg/XWW2/VokWLqqrq6aefru+++667AxJnsnZyxowZVVV/+cAM/2QydnL37t31zjvvVKfTqXPOOWeCJw7S7VMTU8G+ffvawoULW1W16dOntw0bNrTWWvvkk09ap9NpVdVuu+22Q74/lwk4XBO9k3/Yvn17O/bYY9tJJ53URkZGJnpsprCJ2slffvmlrV69ut1///1t5cqV7ZRTTmlV1VavXj3J/4OpTQxMgOXLl49d+3r22Wf/9L3Fixe3qmrTpk1rX3755SHdnxjgcE30TrbW2t69e9vFF1/cqqq9+OKLEz0yU9xE7eS2bdvG7qeq2owZM9qjjz7aRkdHJ3P8KU8MHKbVq1ePLeX9999/0Pc//fTTsQ/TuO666w7pPsUAh2MydnL//v1t2bJlraraihUrJnpkprjJ2MmRkZG2bdu2tmbNmnbMMce0q6+++i9fYMihEQOH4cCP1bz55pv/9nZLly5tVdU6nU77+OOP//V+xQDjNRk7OTo62m677bZWVW3ZsmU+HY7/ZLIeJw/0yCOPtKpqTz755OENG0wMjNP69evb9OnTW1W1BQsWtL179/7tbT///PM2bdq0VlXtyiuv/Nf7FgOMx2Ts5P79+9utt97aqqrdcMMNXifAfzKZj5MH2rJly386q8DBvBx4nK688sq//Xvc/9/ZZ59dIyMjkzwR6SZ6J0dHR+v222+vdevW1fXXX18vvfRSTZs2bSJGJcSRepz84Ycfqso7XA6HtxYCBxkdHa3ly5fXunXrasmSJfXyyy8LAbpqy5Yt9dtvvx10/Oeff65Vq1ZVVdXChQuP9FhThr9N0CPWrl1bmzZtqqqqrVu31kcffVTz5s2rM844o6qqFi1aNPZ+XJhsDz74YD300EM1ODhYd955518+41q0aFGdd955R344It111121du3auvTSS2vu3Lk1MDBQ27dvr/Xr19euXbvq2muvrVdffbX6+jzHHQ/nVHrEpk2b6oUXXvjTsc2bN9fmzZurquq0004TAxwx3377bVVV7dq1628/Ge60004TAxwxixcvrt9++63ef//92rhxYw0PD9fMmTNr/vz5ddNNN9XSpUv9oaLD4MwAAIRzPgUAwokBAAgnBgAgnBgAgHBiAADCiQEACCcGACCcGACAcGIAAMKJAQAIJwYAINz/AOxX+Ig3kiU2AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model(dataset['train_input'])\n",
    "model.tree()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "7377c9b3",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "train loss: 7.77e-04 | test loss: 1.13e-03 | reg: 2.02e+01 : 100%|██| 50/50 [01:03<00:00,  1.27s/it]\n"
     ]
    }
   ],
   "source": [
    "model.fit(dataset, steps=50);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bd0c7fad",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model.tree()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0be943ea",
   "metadata": {},
   "source": [
    "Example 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "62cdea16",
   "metadata": {},
   "outputs": [],
   "source": [
    "f = lambda x: x[:,[0]] * x[:,[1]] * x[:,[2]] / x[:,[3]]\n",
    "dataset = create_dataset(f, n_var=4, ranges=[0.5,2])\n",
    "model = KAN(width=[4,5,5,1], grid=5, k=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "675773b6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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1avrz3/+c1144YX1xz/+cQEmZz7ms+/9+/fXU089VaOjo7V+/fq64447au3atfX666/Xhg0b6pZbblmAyZmP+d6fz/XGG2/U3XffXaOjoz2YcMD1u0b66c0332xLly6drcDR0dG2b9++r/y8v/3tb+29995rrbX2wAMPODPwLTGffT/33HNtx44dRxzfsWNHGx4ebieffLJTkANqPvuenp5uhw4dOuL4f/7zn3bWWWe1qmp79uzp1cgcg/nen39menq6/fCHP2znn39+27hxozMDKT744IO67LLLav/+/XXKKadU1f+/gMX999//lZ97ySWX1IoVK3o9Il00331fddVVddFFFx1x/KKLLqo1a9bUhx9+WK+99lpPZmb+5rvvxYsX19DQ0BHHTzzxxPrRj35UVVVvv/129wfmmBzL/flnHnzwwXr11VfrqaeeqsWLF/dq1IEVGQOTk5N1+eWX1zvvvFNjY2P117/+tdavX19VVU888US9//77/R2QrurVvoeHh6uqjvrLg/7pxb4PHjxYf//736vT6dRZZ53V5Yk5Ft3Y9549e+qee+6pO++8s84+++weTzyg+n1qYqEdOnSorV27tlVVGxoaai+++GJrrbVXX321dTqdVlVt06ZNX/vruUww2Lq978/s3bu3nXDCCe20005r09PT3R6beerWvg8cONC2bNnS7rrrrnbLLbe05cuXt6pqW7Zs6fF3wDfRjX0fOnSonXfeee2cc85pn376aWutteuvvz7uMkFcDGzevHn2mtKTTz75ufd99pKVixcvbv/85z+/1tcTA4Ot2/turbVPP/20XXzxxa2q2m9/+9tuj8wx6Na+33333c89Kn14eLg9/PDDnk0wYLqx73vuuacNDQ21f/zjH7PHxMBxbsuWLbM3nLvuuuuI9+/Zs2f2RSp+/OMff62vKQYGVy/2ffjw4dkHF910003dHplj0It9T09Pt3fffbc98MADbcmSJe3KK6886gMMWXjd2Pfu3bvb8PBw+8UvfvG542LgODb35Sqvv/76L/y4a6+9dvY/tHjllVe+8uuKgcHUi33PzMy0TZs2tapqGzdu9IpmA6RXP99zPfTQQ62q2uOPP35sw3LMurXvc845p61ateqIZwSJgePUCy+80IaGhlpVtUsuuWT2utDRvPHGG23x4sWtqtq6deu+8muLgcHTi30fPny43XDDDa2q2k9/+lOPExggvfz5nmv37t3f6KwCvdHNfc+9FPRlf55//vkefkeDIeJh0OvWrfvC/+f6f61ataqmp6d7PBG91O19z8zM1I033lhPP/10/eQnP6lnn3028qlHg2qhfr7//e9/V5Vnj/RbN/e9efPmox7fsWNHvfXWW3XFFVfUqaeeWitXrpzPqN8qbtXwJWZmZmrz5s21bdu2uuaaa+p3v/udEDiO7d69u77//e/XSSed9LnjH374Yf3qV7+qqqq1a9f2YzR6YGJi4qjHf/7zn9dbb71Vv/zlL+uCCy5Y4Kn6QwzMw8TERO3cubOqavYFZyYmJmr79u1VVbV+/frZ57ny7XbvvffWtm3bamxsrM4888y67777jviY9evX17nnnrvww9F127Ztq4mJiVqzZk2tWLGiRkdHa+/evfXCCy/Uxx9/XFdffXX97Gc/6/eY0HViYB527txZzzzzzOeO7dq1q3bt2lVVVStXrhQDx4n33nuvqqo+/vjjL3w1s5UrV4qB48SGDRvqo48+qpdffrl27NhRU1NTdfLJJ9fq1avruuuuq2uvvbY6nU6/x4Su67TWWr+HAAD6J/LliAGA/xIDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQLj/A6y/OD/NDkGjAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model(dataset['train_input'])\n",
    "model.tree()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "f65dc471",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "train loss: 1.49e-03 | test loss: 3.76e-03 | reg: 2.94e+01 : 100%|██| 50/50 [01:17<00:00,  1.55s/it]\n"
     ]
    }
   ],
   "source": [
    "model.fit(dataset, steps=50);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "d4612e9d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model.tree()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "38f93d8e",
   "metadata": {},
   "source": [
    "Example 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "350537db",
   "metadata": {},
   "outputs": [],
   "source": [
    "model = KAN(width=[4,2,1,1], grid=3, k=3, seed=2)\n",
    "f = lambda x: torch.exp((torch.sin(torch.pi*(x[:,[0]]**2+x[:,[1]]**2))+torch.sin(torch.pi*(x[:,[2]]**2+x[:,[3]]**2)))/2)\n",
    "dataset = create_dataset(f, n_var=4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "19a6fa5d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model(dataset['train_input'])\n",
    "model.tree()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "0a3d84fe",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "train loss: 6.14e-03 | test loss: 6.70e-03 | reg: 7.63e+00 : 100%|██| 50/50 [00:20<00:00,  2.46it/s]\n"
     ]
    }
   ],
   "source": [
    "model.fit(dataset, steps=50);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "38d1e510",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model.tree()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e955f277",
   "metadata": {},
   "source": [
    "It doesn't always work. One may need to tweek seed (with unlucky random seed, it can get stuck at bad local minima)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "acacd12c",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "train loss: 2.86e-01 | test loss: 3.13e-01 | reg: 3.46e+01 : 100%|██| 50/50 [00:19<00:00,  2.51it/s]\n"
     ]
    }
   ],
   "source": [
    "model = KAN(width=[4,2,1,1], grid=3, k=3, seed=4)\n",
    "f = lambda x: torch.exp((torch.sin(torch.pi*(x[:,[0]]**2+x[:,[1]]**2))+torch.sin(torch.pi*(x[:,[2]]**2+x[:,[3]]**2)))/2)\n",
    "dataset = create_dataset(f, n_var=4)\n",
    "model.fit(dataset, steps=50);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "1333bed5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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1avrz3/+c1144YX1xz/+cQEmZz7ms+/9+/fXU089VaOjo7V+/fq64447au3atfX666/Xhg0b6pZbblmAyZmP+d6fz/XGG2/U3XffXaOjoz2YcMD1u0b66c0332xLly6drcDR0dG2b9++r/y8v/3tb+29995rrbX2wAMPODPwLTGffT/33HNtx44dRxzfsWNHGx4ebieffLJTkANqPvuenp5uhw4dOuL4f/7zn3bWWWe1qmp79uzp1cgcg/nen39menq6/fCHP2znn39+27hxozMDKT744IO67LLLav/+/XXKKadU1f+/gMX999//lZ97ySWX1IoVK3o9Il00331fddVVddFFFx1x/KKLLqo1a9bUhx9+WK+99lpPZmb+5rvvxYsX19DQ0BHHTzzxxPrRj35UVVVvv/129wfmmBzL/flnHnzwwXr11VfrqaeeqsWLF/dq1IEVGQOTk5N1+eWX1zvvvFNjY2P117/+tdavX19VVU888US9//77/R2QrurVvoeHh6uqjvrLg/7pxb4PHjxYf//736vT6dRZZ53V5Yk5Ft3Y9549e+qee+6pO++8s84+++weTzyg+n1qYqEdOnSorV27tlVVGxoaai+++GJrrbVXX321dTqdVlVt06ZNX/vruUww2Lq978/s3bu3nXDCCe20005r09PT3R6beerWvg8cONC2bNnS7rrrrnbLLbe05cuXt6pqW7Zs6fF3wDfRjX0fOnSonXfeee2cc85pn376aWutteuvvz7uMkFcDGzevHn2mtKTTz75ufd99pKVixcvbv/85z+/1tcTA4Ot2/turbVPP/20XXzxxa2q2m9/+9tuj8wx6Na+33333c89Kn14eLg9/PDDnk0wYLqx73vuuacNDQ21f/zjH7PHxMBxbsuWLbM3nLvuuuuI9+/Zs2f2RSp+/OMff62vKQYGVy/2ffjw4dkHF910003dHplj0It9T09Pt3fffbc98MADbcmSJe3KK6886gMMWXjd2Pfu3bvb8PBw+8UvfvG542LgODb35Sqvv/76L/y4a6+9dvY/tHjllVe+8uuKgcHUi33PzMy0TZs2tapqGzdu9IpmA6RXP99zPfTQQ62q2uOPP35sw3LMurXvc845p61ateqIZwSJgePUCy+80IaGhlpVtUsuuWT2utDRvPHGG23x4sWtqtq6deu+8muLgcHTi30fPny43XDDDa2q2k9/+lOPExggvfz5nmv37t3f6KwCvdHNfc+9FPRlf55//vkefkeDIeJh0OvWrfvC/+f6f61ataqmp6d7PBG91O19z8zM1I033lhPP/10/eQnP6lnn3028qlHg2qhfr7//e9/V5Vnj/RbN/e9efPmox7fsWNHvfXWW3XFFVfUqaeeWitXrpzPqN8qbtXwJWZmZmrz5s21bdu2uuaaa+p3v/udEDiO7d69u77//e/XSSed9LnjH374Yf3qV7+qqqq1a9f2YzR6YGJi4qjHf/7zn9dbb71Vv/zlL+uCCy5Y4Kn6QwzMw8TERO3cubOqavYFZyYmJmr79u1VVbV+/frZ57ny7XbvvffWtm3bamxsrM4888y67777jviY9evX17nnnrvww9F127Ztq4mJiVqzZk2tWLGiRkdHa+/evfXCCy/Uxx9/XFdffXX97Gc/6/eY0HViYB527txZzzzzzOeO7dq1q3bt2lVVVStXrhQDx4n33nuvqqo+/vjjL3w1s5UrV4qB48SGDRvqo48+qpdffrl27NhRU1NTdfLJJ9fq1avruuuuq2uvvbY6nU6/x4Su67TWWr+HAAD6J/LliAGA/xIDABBODABAODEAAOHEAACEEwMAEE4MAEA4MQAA4cQAAIQTAwAQTgwAQLj/A6y/OD/NDkGjAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model.tree()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "05cf43c8",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
